import sys
script, encoding, errors = sys.argv
"""  
errors 参数的可能取值及其含义如下：
'strict'：默认值。如果遇到编码错误，会抛出 ValueError 异常。这是一种安全的错误处理方式，因为它会立即通知你编码转换中的问题，防止数据丢失或损坏。
'ignore'：忽略无法编码的字符，不将它们包含在输出的字节串中。这种方式可能会导致数据丢失，因为它简单地丢弃了无法处理的字符。
'replace'：用一个特殊的替代字符（通常是问号 ?）来替换无法编码的字符。这种方式不会丢失数据，但是会改变原始数据的内容。
'xmlcharrefreplace'：用 XML 字符引用来替换无法编码的字符。这种方式在生成 XML 或 HTML 内容时特别有用，因为它可以确保输出的内容仍然是有效的 XML 或 HTML。
'backslashreplace'：用反斜杠转义的字符序列来替换无法编码的字符。这种方式在生成需要转义的文本文件时很有用。 
"""

def main(language_file, encoding, errors):
    line = language_file.readline() #readline()方法读文件的一行

    if line:
        print_line(line, encoding, errors)
        return main(language_file, encoding, errors)
    
def print_line(line, encoding, errors):
    next_lang = line.strip()          #.strip是什么 strip()方法移除字符串line两端的空白字符（包括空格、换行符等）
    raw_bytes = next_lang.encode(encoding, errors=errors)#.encode是什么 编码 将字符串编码为字节串（bytes） ex23.py utf-8 replace意思是使用utf—8方法将字符串转换为字节串
    cooked_string = raw_bytes.decode(encoding, errors=errors)#解码 编码和解码都是使用utf-8或者utf-16所以编码解码都一样

    print(raw_bytes, "<==>", cooked_string)

languages = open("languages.txt", encoding="utf-8")

main(languages, encoding, errors)